package com.ss.sdg;

import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import java.util.List;

import com.ss.common.ClassPath;
import com.ss.common.MethodPath;
import com.ss.sdg.interfacedependence.InterfaceDependence;
import com.ss.sdg.methodcalling.MethodCallGraph;
import com.ss.sdg.pdg.Node;
import com.ss.sdg.pdg.PDG;

public class SDG {

	public static Vector<PDG> pdgs = new Vector<PDG>();// all the PDG

	/**
	 * PDG Cross process
	 */
	// callerNodes and calleeNodes
	public static Map<MethodPath, Node> pdgMapCallerNodes = new HashMap<MethodPath, Node>();
	public static Map<MethodPath, Node> pdgMapCalleeNodes = new HashMap<MethodPath, Node>();

	// caller ----> callee
	public static Vector<SDGEdge> pdgMapEdges = new Vector<SDGEdge>();

	/**
	 * Interface Dependency Cross process
	 */
	public static Vector<InterfaceDependence> ids = new Vector<InterfaceDependence>();

	public static Map<MethodPath, com.ss.sdg.interfacedependence.Node> idMapCallerNodes = new HashMap<MethodPath, com.ss.sdg.interfacedependence.Node>();
	public static Map<MethodPath, com.ss.sdg.interfacedependence.Node> idMapCalleeNodes = new HashMap<MethodPath, com.ss.sdg.interfacedependence.Node>();

	public static Vector<SDGEdge> idMapEdges = new Vector<SDGEdge>();

	public static Map<ClassPath, com.ss.sdg.interfacedependence.Node> idMapCallerInterfaceNodes = new HashMap<ClassPath, com.ss.sdg.interfacedependence.Node>();
	public static Map<ClassPath, com.ss.sdg.interfacedependence.Node> idMapCalleeClassNodes = new HashMap<ClassPath, com.ss.sdg.interfacedependence.Node>();

	public static Vector<SDGIDEdge> idMapEdgesClassToInterface = new Vector<SDGIDEdge>();

	public static List<MethodCallGraph> methodCallGraphs=null;
	
	public static int sdgNodeCount = 0;

	public static int sdgEdgeCount = 0;
}
